package cn.iocoder.yudao.module.member.service.usercommission;

import javax.validation.*;

import cn.iocoder.yudao.module.member.controller.admin.usercommission.vo.*;
import cn.iocoder.yudao.module.member.dal.dataobject.usercommission.UserCommissionDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 佣金 Service 接口
 *
 * @author 芋道源码
 */
public interface UserCommissionService {

    /**
     * 创建佣金
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createUserCommission(@Valid UserCommissionSaveReqVO createReqVO);

    /**
     * 创建佣金
     *
     * @param inviteeUserId     被邀请用户编号
     * @param payPackageOrderId 充值套餐订单编号
     * @param recharge          充值金额
     * @return 编号
     */
    void addUserCommission(Long inviteeUserId, Long payPackageOrderId, Integer recharge);

    /**
     * 更新佣金
     *
     * @param updateReqVO 更新信息
     */
    void updateUserCommission(@Valid UserCommissionSaveReqVO updateReqVO);

    /**
     * 删除佣金
     *
     * @param id 编号
     */
    void deleteUserCommission(Long id);

    /**
     * 获得佣金
     *
     * @param id 编号
     * @return 佣金
     */
    UserCommissionDO getUserCommission(Long id);

    /**
     * 获得佣金分页
     *
     * @param pageReqVO 分页查询
     * @return 佣金分页
     */
    PageResult<UserCommissionDO> getUserCommissionPage(UserCommissionPageReqVO pageReqVO);

    /**
     * 佣金，单位：分
     *
     * @param userId
     * @return
     */
    Integer totalCommissionByUserId(Long userId);

    /**
     * 一级邀请累计充值，单位：分
     *
     * @param userId
     * @return
     */
    Integer firstTotalRechargeByUserId(Long userId);

    /**
     * 一级邀请累计充值，单位：分
     *
     * @param firstInviteeUserId
     * @return
     */
    Integer firstTotalRecharge(Long firstInviteeUserId);

    /**
     * 二级邀请累计充值，单位：分
     *
     * @param firstInviteeUserId
     * @return
     */
    Integer secondTotalRecharge(Long firstInviteeUserId);

}